package com.itbaizhan.shopping_admin_service.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itbaizhan.shopping_admin_service.mapper.RoleMapper;
import com.itbaizhan.shopping_common.pojo.Role;
import com.itbaizhan.shopping_common.service.RoleService;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 角色管理
 */
@DubboService
@Transactional
@Service
public class RoleServiceImpl implements RoleService {
	
	@Autowired
	private RoleMapper roleMapper;
	
	
	/**
	 * 新增角色
	 *
	 * @param role
	 */
	public void add(Role role) {
		roleMapper.insert(role);
	}
	
	/**
	 * 修改角色
	 *
	 * @param role
	 */
	public void update(Role role) {
		roleMapper.updateById(role);
	}
	
	/**
	 * 根据id删除角色
	 *
	 * @param id
	 */
	public void delete(Long id) {
		// 删除角色
		roleMapper.deleteById(id);
		// 删除角色的所有权限
		roleMapper.deleteRoleAllPermission(id);
		// 删除用户_角色中间表的相关数据
		roleMapper.deleteRoleAllAdmin(id);
	}
	
	/**
	 * 查询所有角色
	 *
	 * @return
	 */
	public List<Role> findAll() {
		
		return roleMapper.selectList(null);
	}
	
	/**
	 * 根据id查询角色
	 *
	 * @param id
	 * @return
	 */
	public Role findById(Long id) {
		return roleMapper.findById(id);
	}
	
	/**
	 * 分页查询角色
	 *
	 * @param page
	 * @param size
	 * @return
	 */
	public Page<Role> search(int page, int size) {
		Page<Role> pageRole = roleMapper.selectPage(new Page<>(page, size), null);
		return pageRole;
	}
	
	/**
	 * 为角色添加权限
	 *
	 * @param rid
	 * @param pids
	 */
	public void updatePermissionToRole(Long rid, Long[] pids) {
		roleMapper.deleteRoleAllPermission(rid);
		for (Long pid : pids) {
			roleMapper.addPermissionToRole(rid, pid);
		}
	}
}
